﻿using System;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using Sinacor.UI.Bovespa.Movimento.Communication.Bovespa.Movimento.ControleMovimentoBolsa;

namespace Sinacor.UI.Bovespa.Movimento.Communication
{
    /// <summary>
    /// 
    /// </summary>
    public class ControleMovimentoBolsa : BaseCommunication
    {
        #region Construtor

        public ControleMovimentoBolsa(SessionInformation session) 
            : base(session) 
        { 
        }

        #endregion

        #region Métodos Públicos

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public Model.DataMovimento CalcularDataAberturaMovimento()
        {
            Model.DataMovimento dataMovimento = new Model.DataMovimento();
            try
            {
                using (ServiceInstance<IControleMovimentoBolsa> serviceManager = new ServiceInstance<IControleMovimentoBolsa>())
                {
                    IControleMovimentoBolsa servico = serviceManager.TryGetInstance(this.Session);
                    dataMovimento = Translator.DataContractToModel.ControleMovimentoBolsa.ToDataMovimento(servico.CalcularDataAberturaMovimento());
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
            return dataMovimento;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public Model.InformacoesMovimento ObterInformacoesMovimento(Model.DataMovimento request)
        {
            Model.InformacoesMovimento response = new Model.InformacoesMovimento();
            try
            {
                using (ServiceInstance<IControleMovimentoBolsa> serviceManager = new ServiceInstance<IControleMovimentoBolsa>())
                {
                    IControleMovimentoBolsa servico = serviceManager.TryGetInstance(this.Session);
                    response = Translator.DataContractToModel.ControleMovimentoBolsa.ToInformacoesMovimento(servico.ObterInformacoesMovimento(Translator.ModelToDataContract.ControleMovimentoBolsa.ToDataMovimentoRequest(request)));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
            return response;
        }

        public void RemontaCalendario()
        {
            try
            {
                using (ServiceInstance<IControleMovimentoBolsa> serviceManager = new ServiceInstance<IControleMovimentoBolsa>())
                {
                    IControleMovimentoBolsa servico = serviceManager.TryGetInstance(this.Session);
                    servico.RemontarCalendario();
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
        }

        #endregion
    }
}
